import { LoginResponse } from '@/types/data'
import { RootThunkAction } from '@/types/store'
import { http } from '@/utils/http'
import { setToken, clearToken } from '@/utils/token'

// 创建 登录 的 action
type LoginParams = {
  mobile: string
  code: string
}

export const login = (data: LoginParams): RootThunkAction => {
  return async dispatch => {
    // 为该接口的返回值指定类型
    const res = await http.post<LoginResponse>('/authorizations', data)

    const { data: token } = res.data
    // 将 token 数据存储到本地缓存中
    setToken(token)
    // 分发 action 将 token 存储到 redux 中
    dispatch({ type: 'login/token', payload: token })
  }
}

// 获取验证码
export const getCode = (mobile: string): RootThunkAction => {
  return async () => {
    await http.get(`/sms/codes/${mobile}`)
  }
}

// 退出
export const logout = (): RootThunkAction => {
  return dispatch => {
    // 清空本地缓存中 token
    clearToken()
    // 清空 redux 中存储的 token
    dispatch({ type: 'login/logout' })
  }
}
